//字符串
let aName:string = "123"

//number 数字
let bNum:number= 123;
bNum = 3.22
bNum = -1.2;
//不布尔类型 true FALSE
let isDog :boolean = true;
isDog = false;

// undefined and null
let undef :undefined = undefined;
let nul:null =null;

let arrJs = [1,'123',true,[],{}];//原js效果

let arrHero :string[] =["dsad","dasdas",'222'];
let arrHeroAge :number[]=[12,33,232];
let arrHeroAge2:Array<number>=[22,32.3,233]

//new typr  新的数据类型登场
// let 元祖名：[类型1、类型2、类型3]  
let tup1 :[string,number,boolean] = ["22",222,true]
tup1[0];
tup1.length;

//枚举类型   enum 枚举名称{枚举项1 = 枚举值，枚举项2 = 枚举值3，枚举项 = 枚举值}
// 也可以使用枚举默认值 enum 枚举名称{枚举项1，枚举项2 ，枚举项3}  默认值是从0开始，这里是0,1,2
enum Gender{
    Boy=1,
    Girl=2,
    Unkenow=3
}

console.log(Gender.Boy);//1
console.log(Gender.Girl)//2
console.log(Gender.Unkenow);//3

enum Gender2{
    Boy,
    Girl,
    Unkenow
}

console.log(Gender2.Boy);//0;
console.log(Gender2.Girl);//1
console.log(Gender2.Unkenow);//2

//使用性别枚举
let userSex = Gender.Boy;
console.log(userSex);//1

// any 任意类型  返回任何类型都是可以的
//获取接口返回使用,或者不确定类型
let txtName :any = document.getElementById("txtName")
// void 没有返回值 常用在函数中
function sayHi1():string{//返回string 的函数
    return "hi,221"
}

function sayHi2():void{
    console.log("我没有返回内容")
}
// never 代表不存在的类型，常用处理异常
// never 是ts中的底部类型，所有类型都是never的父类
function test():never{
    while(true){

    }
}
function test2():never{
    throw new Error("异常啦")
}
//因为是底层类型，任何类型值都可以赋值给它
let x:never = test();
let y:string = test();

// ts中还有类型推断机制，如果你不明确类型，会通过你赋值结果来初始化它的类型
let age =18;
// age ="123"  ;// it is error

// 联合类型： 数据返回可能是两种不同的类型，返回任一一个都是正确的
let dName :string|null =prompt("请输入你的名字");
//输入名字得到string，取消得到null
console.log("hello"+dName);



